package com.hyf.msmservice.controller;

import com.hyf.commonutils.fruit;
import com.hyf.msmservice.service.MsmService;
import com.hyf.msmservice.utils.RandomUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/edumsm/msm")
@CrossOrigin //跨域
public class MsmController {

    @Autowired
    private MsmService msmService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    //发送短信的方法
    @GetMapping("send/{phone}")
    public fruit sendMsm(@PathVariable String phone){
        //先从 redis 获取验证码，如果获取到直接返回
        String code = redisTemplate.opsForValue().get(phone);

        // 判断redis 值是否为空
        if(!StringUtils.isEmpty(code)){
            return fruit.ok();
        }
      // 如果redis 获取不到，进行阿里云发送
        // 生成随机值，传递阿里云进行发送
         code= RandomUtil.getFourBitRandom();// 随机生成四位的验证码

        System.out.println(code);
        // 传递给阿里云
        Map<String,Object> param=new HashMap<>();// 先建立一个map 集合，把生成的验证码放进去
        
        param.put("code",code);

        // 调用service 中的方法进行远程调用 发送短信的方法
        boolean isSend= msmService.send(param,phone);

        if(isSend){
            // 发送成功，把发送成功验证码放到redis里面

            //设置有效时间
            redisTemplate.opsForValue().set(phone,code,5,TimeUnit.MINUTES);// 设置有效时常为 5分钟

            return fruit.ok();// 发送成功
        }else {

            redisTemplate.opsForValue().set(phone,"2222",5,TimeUnit.MINUTES);// 设置有效时常为 5分钟
            return fruit.error().message("短信发送失败,没有申请成功阿里云短信,虚假验证码2222");

        }



/**        if(isSend) {
            //发送成功，把发送成功验证码放到redis里面
            //设置有效时间
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
            return fruit.ok();
        } else {
            //没有注册阿里云,发送失败则写入假的验证码redis
            redisTemplate.opsForValue().set(12345678911,2222,5, TimeUnit.MINUTES);
            return fruit.error().message(短信发送失败);
        }
 **/

    }








/*
  课件中的方法

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @GetMapping(value = "/send/{phone}")
    public fruit code(@PathVariable String phone) {

        String code = redisTemplate.opsForValue().get(phone);

        if(!StringUtils.isEmpty(code)) return fruit.ok();


        code = RandomUtil.getFourBitRandom();

        Map<String,Object> param = new HashMap<>();

        param.put("code", code);

        boolean isSend = msmService.send(phone, "SMS_180051135", param);

        if(isSend) {

            redisTemplate.opsForValue().set(phone, code,5, TimeUnit.MINUTES);

            return fruit.ok();

        } else {

            return fruit.error().message("发送短信失败");

        }
*/

    }



